package com.nt.train.service;
import com.nt.train.entity.GroupQuery;
import com.nt.train.entity.GroupUser;
import com.nt.train.enums.GroupType;
import java.util.List;
/**
 *
 * 人群选择接口
 * @author hlf
 * @version 1.0
 * @date 2022/8/5 14:18
 */
public interface IGroupSelect {

    /**
     * 人群获取方式
     * @return 人群选择枚举
     */
    GroupType type();


    /**
     * 查询满足条件的用户
     * @param groupQuery 查询条件
     * @return 满足条件的用户
     */
    default List<GroupUser> queryUser(GroupQuery groupQuery) {
        //检查条件
        checkQueryCondition(groupQuery);
        //执行
        return doQuery(groupQuery);
    }

    /**
     * 事前校验查询条件
     * @param groupQuery 查询条件
     * @throws IllegalArgumentException 参数异常
     */
    void checkQueryCondition(GroupQuery groupQuery) throws IllegalArgumentException;

    /**
     * 真正的查询方法
     * @param groupQuery 查询条件
     * @return 满足条件的用户
     */
    List<GroupUser> doQuery(GroupQuery groupQuery);
}
